其他
程序员内功修炼系列:10 张图解谈 Linux 物理内存和虚拟内存
来源 | 后端技术学堂
责编 | Carol
封图 | CSDN 付费下载于视觉中国
1、物理页管理面临问题
2、外部碎片
3、内部碎片
4、页面管理算法
5、Buddy(伙伴)分配算法
6、分配实例
7、命令查看
br
8、slab分配器
10、大白话说原理
11、主要优点
slab 内存管理基于内核小对象,不用每次都分配一页内存,充分利用内存空间,避免内部碎片。
slab 对内核中频繁创建和释放的小对象做缓存,重复利用一些相同的对象,减少内存分配次数。
12、数据结构
slabs_full (完全分配的 slab 链表)
slabs_partial (部分分配的slab 链表)
slabs_empty ( 没有被分配对象的slab 链表)
如果slabs_partial链表还有未分配的空间,分配对象,若分配之后变满,移动 slab 到slabs_full 链表
如果slabs_partial链表没有未分配的空间,进入下一步
如果slabs_empty 链表还有未分配的空间,分配对象,同时移动slab进入slabs_partial链表
如果slabs_empty为空,请求伙伴系统分页,创建一个新的空闲slab, 按步骤 3 分配对象
13、命令查看
14、slab高速缓存的分类
15、通用高速缓存
16、专用高速缓存
17、专用高速缓存的申请和释放
18、slab的申请和释放
虚拟内存分配
1、用户空间内存分配
malloc
存在问题
解决
2、内核空间内存分配
kmalloc
vmalloc
总结一下
推荐阅读